package gdut.edu.demo02;

/**
 * @Description 栈
 * @Author JiaFu
 * @Date 2022/7/6 16:01
 */
public class MyStack {
    private int[] elements;

    public MyStack() {
        this.elements = new int[0];
    }

    //    压入元素
    public void push(int element) {
//        创建新的数组，数组长度为旧数组长度+1
        int[] newArr = new int[this.elements.length + 1];
//        将旧数组中的元素复制到新数组
        for (int i = 0; i < this.elements.length; i++) {
            newArr[i] = this.elements[i];
        }
//        在新数组的末尾添加元素element
        newArr[newArr.length - 1] = element;
//        新数组替换旧数组
        this.elements = newArr;
    }


    //    取出栈顶元素
    public int pop() {
//        判断栈是否为空
        if (this.elements.length == 0) {
            throw new RuntimeException("栈为空，无元素可弹出");
        }
//        栈不为空，可以取出栈顶元素
        int element = this.elements[this.elements.length - 1];
//        创建一个新数组，数组长度为旧数组长度-1
        int[] newArr = new int[this.elements.length - 1];
//        将旧数组最后一个元素前面的所有元素复制到新数组
        for (int i = 0; i < newArr.length; i++) {
            newArr[i] = this.elements[i];
        }
//        新数组替换旧数组
        this.elements = newArr;
//        返回栈顶元素
        return element;
    }

    //    查看栈顶元素
    public int peek() {
//        判断栈是否为空
        if (this.elements.length == 0) {
            throw new RuntimeException("栈为空，不可以查看栈顶元素");
        }
//        栈不为空，返回栈顶元素
        return this.elements[this.elements.length - 1];
    }

    //    查看栈是否为空
    public boolean isEmpty() {
        return this.elements.length == 0;
    }
}
